//
//  HSMessageListviewModal.swift
//  SchoolDemo
//
//  Created by rimi on 16/10/10.
//  Copyright © 2016年 YQ. All rights reserved.
//

import UIKit



/// 判断刷新类型的枚举
///
/// - pull: 上拉
/// - drop: 下拉
enum MessageLoadType {
    case pull
    case drop
    
}

//定义闭包类型
typealias callback = (_ err:Error?, _ isRefresh:Bool) -> ()

class HSMessageListviewModal {

    //模型数组
    var messages:[HSMessageViewModal] = []
    //请求数据
    func requestMessage(loadType: MessageLoadType, finished: @escaping callback) {
        //接口地址
        let url = "ZH-schoolname-S-getJXNotification"
        //准备参数
        let key = userInfo["key"] as! String
        //获得当前最小的通知ID
        let minID = messages.last?.message.not_id ?? 0
        //根据刷新类型来获得通知的ID
        let id = (loadType == .drop) ? 0 : minID
        //根据刷新类型来获得通知的ID
        let lType = (loadType == .drop) ? 1 : 2
        //参数
        let param = ["key":key,"id":id,"load_type":lType] as [String : Any]
        
        //开始网络请求
        HSNetWorkTools.shared.downloadData(url: url, parameters: param) {[weak self] (data, err) in

            //守护
            guard let data = data as? NSDictionary else {
                HSAlertView.bottomAlertView("网络异常，请检查网络连接")
                //网络加载失败也要通知控制器做处理
                finished(err,false)
                return
            }
            
            //判断返回数据的正确
            switch data["result"] as! Int {
            case 0:
//                print(data["data"])
                //字典转模型
                //获得字典数组
                let dictArray = data["data"] as! [NSDictionary]
                //创建一个保存模型的数组
                var modelArray = [HSMessageViewModal]()
                
                //循环
                for dict in dictArray {
                    //创建一个模型对象
                    let message = HSMessageModal(dict: dict as! [String : Any])
                    //获得模型中的回复数据数组
                    if let replayArray = message.replaylist {
                    //创建一个可变的保存回复数据模型的数组
                    var replayMArray = [HSReplaylistModal]()
                    //循环
                    for rDict in replayArray {
                        //实例化一个回复模型
                        let replayModal = HSReplaylistModal(dict: rDict as! [String: Any])
                        //添加到回复模型数组
                        replayMArray.append(replayModal)
                    }
                    //从新将转换好的回复数模型数组赋值给消息模型
                        message.replaylist = replayMArray
                }
                    //添加到消息模型数组中
                    modelArray.append(HSMessageViewModal(modal: message))
                }
                //根据刷新类型来判断数据的添加方式
                //下拉的时候是覆盖原有数据
                //上拉的时候是将新获得的数据添加到已有数据的后面
                if loadType == .drop {
                    //赋值
                    self?.messages = modelArray
                    
                } else {
                    self?.messages = (self?.messages)! + modelArray
                }
                
                //刷新视图 数据正常处理完成，
                finished(nil,true)
                
            case 1:
                HSAlertView.bottomAlertView("数据加载失败")
                //网络正常，但数据加载失败，通知控制器不需要刷新视图
                finished(nil,false)
            default:
                break
                
            }
            
            
    
            
        }
        
    }

}
  

